// 两根线
// 同步：组件 commit -> mutations -> state
// 异步： 组件 dispatch -> actions -> commit -> mutations -> state
import { login, getUserInfo, getDetailUserInfo } from '@/api/user'
import { getToken, setToken, removeToken, setTimestamp } from '@/utils/auth'
import { resetRouter } from '@/router'
export default {
  // 开启命名空间
  namespaced: true,
  // 放数据的地方
  state: {
    token: getToken(),
    userInfo: {}
  },
  // 相当于组件中计算属性
  getters: {},
  // 这个是唯一修改state中数据地方
  mutations: {
    // setCount(state) {}
    setToken(state, newToken) {
      state.token = newToken
      setToken(newToken)
    },
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },
    removeToken(state) {
      state.token = null
      removeToken()
    },
    removeUserInfo(state) {
      state.userInfo = {}
    }

  },
  // 写异步的ajax的地方
  // actions是有返回值 外面是可以拿到的
  actions: {
    // store.commit()
    // getData(store){}
    async login({ commit }, userInfo) {
      const res = await login(userInfo)
      commit('setToken', res)
      setTimestamp()
    },
    async getUserInfo({ commit }) {
      const res = await getUserInfo()
      const res1 = await getDetailUserInfo(res.userId)
      commit('setUserInfo', { ...res, ...res1 })
      return res.roles.menus
    },
    // 有些时候哪怕代码不是异步，是同步，用actions也是有好处
    // actions可以写异步 不是必须写异步
    logout(store) {
      store.commit('removeToken')
      store.commit('removeUserInfo')
      // 重置路由对象上的路由规则 本来有静态+动态路由 重置完了只有静态
      // 如果这一个不重置的后果是：先用管理员登录 再退出用文吉星登 发现文吉星能访问
      // 自己不应该访问的页面
      resetRouter()
      // 我们之前在某个模块中操作mutations
      // store.commit('setRoutes',[]) 操作自己的
      // a模块操作B模块中的mutations或actions
      // 必须带命名空间并且最后面要写一个{root:true}
      store.commit('permissions/setRoutes', [], { root: true })
    }
  }
}

// 开始做核酸 打开手机 计时器 72小时 倒计时 到时间响应提示重新做一次 主动介入
// 公共场合 一扫码 灰色 提示 超过72小时 强迫他做 被动介入

// 主动介入 在登录的一瞬间把当前的时间戳存到本地存储
